// run: $exec < input
#include <iostream>
#include <algorithm>
#include <set>

int const maxn = 200 * 200;
bool not_prime[maxn];
std::set<int> prime;

int dx1, dy1, dx2, dy2;

bool is_prime(int x)
{
	return prime.find(x) != prime.end();
}

void init_prime()
{
	for (int i = 2; i < maxn; i++) {
		if (not_prime[i]) continue;
		prime.insert(i);
		for (int j = 2 * i; j < maxn; j += i)
			not_prime[j] = true;
	}
}

bool judge(int x, int y)
{
	if (!x && !y) return false;
	if (!y) std::swap(x, y);
	if (!x) {
		if (y < 0) y = -y;
		if (!is_prime(y)) return false;
		if (y < 3) return false;
		y -= 3;
		if (y % 4) return false;
	} else {
		if (!is_prime(x * x + y * y)) return false;
	}
	return true;
}

void print(int x, int y)
{
	if (!x) { std::cout << "0/1\n"; return; }
	for (std::set<int>::iterator it = prime.begin(); it != prime.end(); ++it) {
		if (*it > x) break;
		while (!(x % *it) && !(y % *it)) {
			x /= *it;
			y /= *it;
		}
	}
	std::cout << x << '/' << y << '\n';
}

int main()
{
	std::ios::sync_with_stdio(false);
	init_prime();
	int T; std::cin >> T;
	while (T--) {
		std::cin >> dx1 >> dx2 >> dy1 >> dy2;
		int tot = 0;
		for (int i = dx1; i <= dx2; i++)
			for (int j = dy1; j <= dy2; j++)
				tot += judge(i, j);
		print(tot, (dy2 - dy1 + 1) * (dx2 - dx1 + 1));
	}
}

